package com.alex.monitor.core.rule;

import com.alex.monitor.core.annotation.MethodMonitor;
import java.lang.reflect.Method;

/**
 * 监控规则接口
 * <p>
 * 定义了在特定情况下触发消息提醒的规则。
 * 实现此接口的类需要提供匹配逻辑,以决定是否触发消息提醒。
 *
 * @author Alex.Liu
 * @since 1.0.0
 */
public interface MonitorRule {

    /**
     * 判断方法执行结果是否匹配监控规则
     * <p>
     * 如果返回true,将触发消息提醒。
     *
     * @param annotation MethodMonitor注解内容,包含监控配置信息
     * @param result     被监控方法的返回值
     * @return 如果匹配规则返回true, 否则返回false
     */
    default boolean match(Method method, MethodMonitor annotation, Object result) {
        return Boolean.FALSE;
    }

    /**
     * 判断方法执行异常是否匹配监控规则
     * <p>
     * 如果返回true,将触发消息提醒。
     *
     * @param annotation MethodMonitor注解内容,包含监控配置信息
     * @param exception  被监控方法执行过程中抛出的异常
     * @return 如果匹配规则返回true, 否则返回false
     */
    default boolean match(Method method, MethodMonitor annotation, Throwable exception) {
        return Boolean.FALSE;
    }
}